package com.LeeCode;

/**
 * 找出满足差值条件的下标 II
 */

public class Code2905 {
    public static void main(String[] args) {

    }

    public int[] findIndices(int[] nums, int indexDifference, int valueDifference) {
        int n = nums.length;
        if (n <= indexDifference) {
            return new int[]{-1, -1};
        }

        // 维护前缀中的最大值和最小值及其索引
        int minIndex = 0;
        int maxIndex = 0;

        // 从满足距离条件的第一个位置开始
        for (int j = indexDifference; j < n; j++) {
            int i = j - indexDifference;

            // 更新前缀中的最值
            if (nums[i] < nums[minIndex]) {
                minIndex = i;
            }
            if (nums[i] > nums[maxIndex]) {
                maxIndex = i;
            }

            // 检查是否满足值差异条件
            if (Math.abs(nums[j] - nums[minIndex]) >= valueDifference) {
                return new int[]{minIndex, j};
            }
            if (Math.abs(nums[j] - nums[maxIndex]) >= valueDifference) {
                return new int[]{maxIndex, j};
            }
        }

        return new int[]{-1, -1};
    }
}
